/*------------------------------------------------------
                hou_elearningGEN beta v1.0
Author: xtrung.net@gmail.com
Write On: 04/27/2008
Create On:4/13/2012 11:22:27 AM
------------------------------------------------------*/
using hou_elearning.Entity;
using hou_elearning.DataAccess;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
namespace hou_elearning.Business
{
    public class Thongbao_NguoidungBRL
    {
        #region Init
        private static string EX_ID_INVALID = "PK_iThongbao_NguoidungID không hợp lệ";
        private static string EX_NOT_EXIST="Không Tồn Tại Thongbao_Nguoidung Này";
		private static string EX_FK_INGUOIDUNGID_INVALID="FK_iNguoitaoID không hợp lệ";
        private static string EX_FK_ITHONGBAOID_INVALID = "FK_iThongbaoID không hợp lệ";
        #endregion
        #region Public Methods
        /// <summary>
        /// Get Thongbao_Nguoidung Theo ID
        /// </summary>
        /// <param name="PK_iThongbao_NguoidungID">Int64:Thongbao_Nguoidung ID</param>
        /// <returns>Thongbao_NguoidungEntity</returns>        
        public static Thongbao_NguoidungEntity GetOne(Int64 PK_iThongbao_NguoidungID)
        {
			if(PK_iThongbao_NguoidungID<=0)
				throw new Exception(EX_ID_INVALID);
            return Thongbao_NguoidungDAL.GetOne(PK_iThongbao_NguoidungID);
        }
        public static List<Thongbao_NguoidungEntity> GetByFK_iNguoidungID(Int64 FK_iNguoidungID)
        {
            if (FK_iNguoidungID <= 0)
                throw new Exception("FK_iNguoidungID không hợp lệ!");
            return Thongbao_NguoidungDAL.GetByFK_iNguoidungID(FK_iNguoidungID);
        }
        public static Thongbao_NguoidungEntity GetByFK_iNguoidungIDAndFK_iThongbaoID(Int64 FK_iNguoidungID, Int64 FK_iThongbaoID)
        {
            return Thongbao_NguoidungDAL.GetByFK_iNguoidungIDAndFK_iThongbaoID(FK_iNguoidungID, FK_iThongbaoID);
        }
        /// <summary>
        /// Lấy về List các Thongbao_Nguoidung
        /// </summary>
        /// <returns>List Thongbao_NguoidungEntity:List Thongbao_Nguoidung Cần lấy</returns>
        public static List<Thongbao_NguoidungEntity> GetAll()
        {
            return Thongbao_NguoidungDAL.GetAll();
        }
        /// <summary>
        /// Kiểm tra và thêm mới Thongbao_Nguoidung
        /// </summary>
        /// <param name="entity">Entity</param>
        /// <returns>Int32: ID của Thongbao_Nguoidung Mới Thêm Vào</returns>
        public static Int32 Add(Thongbao_NguoidungEntity entity)
        {
            checkLogic(entity);
            checkDuplicate(entity, false);
            checkFK(entity);
            return Thongbao_NguoidungDAL.Add(entity);
        }
        /// <summary>
        /// Kiểm tra và chỉnh sửa Thongbao_Nguoidung
        /// </summary>
        /// <param name="entity">Thongbao_NguoidungEntity</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Edit(Thongbao_NguoidungEntity entity)
        {
            checkExist(entity.PK_iThongbao_NguoidungID);
            checkLogic(entity);
            checkDuplicate(entity, true);
            checkFK(entity);
            return Thongbao_NguoidungDAL.Edit(entity);
        }
        /// <summary>
        /// Kiểm tra và xoá Thongbao_Nguoidung
        /// </summary>
        /// <param name="PK_iThongbao_NguoidungID">Int64 : PK_iThongbao_NguoidungID</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Remove(Int64 PK_iThongbao_NguoidungID)
        {
            checkExist(PK_iThongbao_NguoidungID);
            return Thongbao_NguoidungDAL.Remove(PK_iThongbao_NguoidungID);
        }
        #endregion
        #region Private Methods
        private static void checkExist(Int64 PK_iThongbao_NguoidungID)
        {
            Thongbao_NguoidungEntity oThongbao_Nguoidung=Thongbao_NguoidungDAL.GetOne(PK_iThongbao_NguoidungID);
            if(oThongbao_Nguoidung==null)
                throw new Exception(EX_NOT_EXIST);
        }
        /// <summary>
        /// Kiểm tra logic Entity
        /// </summary>
        /// <param name="entity">Thongbao_NguoidungEntity: entity</param>
        private static void checkLogic(Thongbao_NguoidungEntity entity)
        {   
			if (entity.FK_iNguoidungID < 0)
				throw new Exception(EX_FK_INGUOIDUNGID_INVALID);
            if (entity.FK_iThongbaoID < 0)
                throw new Exception(EX_FK_ITHONGBAOID_INVALID);
        }
        /// <summary>
        /// Kiểm tra trùng lặp bản ghi
        /// </summary>
        /// <param name="entity">Thongbao_NguoidungEntity: Thongbao_NguoidungEntity</param>
        private static void checkDuplicate(Thongbao_NguoidungEntity entity,bool checkPK = false)
        {
            
            ////Example
            //List<Thongbao_NguoidungEntity> list = Thongbao_NguoidungDAL.GetAll();
            //if (list.Exists(
            //    delegate(Thongbao_NguoidungEntity oldEntity)
            //    {
            //        bool result = oldEntity.sTenbaihoc.Equals(entity.sTenbaihoc, StringComparison.OrdinalIgnoreCase);
            //        if(checkPK)
            //            result=result && oldEntity.PK_iThongbao_NguoidungID != entity.PK_iThongbao_NguoidungID;
            //        return result;
            //    }
            //))
            //{
            //    list.Clear();
            //    throw new Exception(EX_STENSLIDE_EXISTED);
            //}
            
        }
        /// <summary>
        /// Kiểm tra tồn tại khóa ngoại
        /// </summary>
        /// <param name="entity">Thongbao_NguoidungEntity:entity</param>
        private static void checkFK(Thongbao_NguoidungEntity entity)
        {            
			NguoidungEntity oNguoidung = NguoidungDAL.GetOne(entity.FK_iNguoidungID);
			if (oNguoidung==null)
			{
                throw new Exception("Không tìm thấy :FK_iNguoidungID");
			}
            ThongbaoEntity oThongbao = ThongbaoBRL.GetOne(entity.FK_iThongbaoID);
            if (oThongbao == null)
            {
                throw new Exception("Không tìm thấy :FK_iThongbaoID");
            }
        }
        #endregion
    }
}
